#!/bin/bash

function run_with_retry()
{
    if [[ $- =~ e ]]; then
      set_e=true
    else
      set_e=false
    fi
    set +e

    local total_retries="$1"
    shift

    local retry=0

    until [ "$retry" -ge "$total_retries" ]
    do
        if "$@"; then
            if $set_e; then
              set -e
            fi
            return
        else
            retry=$((retry + 1))
            sleep 5
        fi
    done

    echo "Command '$*' failed after $total_retries retries, exiting"
    exit 1
}

function fn_exists() {
    declare -F "$1" > /dev/null;
}

function timeout_with_logging() {
    local exit_code=0

    timeout "${@}" || exit_code="${?}"

    if [[ "${exit_code}" -eq "124" ]]
    then
      echo "The command 'timeout ${*}' has been killed by timeout"
    fi

    return $exit_code
}

# vi: ft=bash
